package com.exam.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.exam.entity.ApiResult;
import com.exam.entity.Student;
import com.exam.serviceimpl.StudentServiceImpl;
import com.exam.util.ApiResultHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/** 学生管理模块、管理中心
 * 分页查询、学生信息的增删改查、学生修改密码
 */
@RestController
public class StudentController {

    @Autowired
    private StudentServiceImpl studentService;

    /** 模块-页面：成绩查询-学生成绩查询
     * 分页查询所有 student表
     * @param page
     * @param size
     * @return
     */
    @GetMapping("/students/{page}/{size}")
    public ApiResult findAll(@PathVariable Integer page, @PathVariable Integer size) {
        Page<Student> studentPage = new Page<>(page,size);
        IPage<Student> res = studentService.findAll(studentPage);
        return  ApiResultHandler.buildApiResult(200,"分页查询所有学生",res);
    }

    /** 模块-页面：学生管理-学生管理-“编辑”按钮
     * 根据用户选择的学生studentId查询student表中的该学生的记录，返回给前端，显示到编辑学生信息的卡片中。
     * @param studentId
     * @return
     */
    @GetMapping("/student/{studentId}")
    public ApiResult findById(@PathVariable("studentId") Integer studentId) {
        Student res = studentService.findById(studentId);
        if (res != null) {
        return ApiResultHandler.buildApiResult(200,"请求成功",res);
        } else {
            return ApiResultHandler.buildApiResult(404,"查询的用户不存在",null);
        }
    }
    /** 模块-页面：学生管理-学生管理-“编辑”按钮
     * 获取请求数据中修改好的学生信息，根据用户选中的学生studentId修改student表中该学生的记录。
     * @param student
     * @return
     */
    @PutMapping("/student")
    public ApiResult update(@RequestBody Student student) {
        int res = studentService.update(student);
        if (res != 0) {
            return ApiResultHandler.buildApiResult(200,"更新成功",res);
        }
        return ApiResultHandler.buildApiResult(400,"更新失败",res);
    }

    /** 模块-页面：学生管理-学生管理-“删除”按钮
     * 根据用户选中的学生studentId删除student表中该学生的记录。
     * @param studentId
     * @return
     */
    @DeleteMapping("/student/{studentId}")
    public ApiResult deleteById(@PathVariable("studentId") Integer studentId) {
        return ApiResultHandler.buildApiResult(200,"删除成功",studentService.deleteById(studentId));
    }

    /** 模块-页面：学生管理-添加学生
     * 获取请求数据中用户输入的要新增的学生信息，在student表中插入一条新记录。
     * @param student
     * @return
     */
    @PostMapping("/student")
    public ApiResult add(@RequestBody Student student) {
        int res = studentService.add(student);
        if (res == 1) {
            return ApiResultHandler.buildApiResult(200,"添加成功",null);
        }else {
            return ApiResultHandler.buildApiResult(400,"添加失败",null);
        }
    }

    /**（学生账号登录）管理中心
     * 获取请求数据中用户输入的要修改的密码信息，根据登录账号的学生studentId修改student表中该学生的密码。
     * @param student
     * @return
     */
    @PutMapping("/studentPWD")
    public ApiResult updatePwd(@RequestBody Student student) {
        studentService.updatePwd(student);
        return ApiResultHandler.buildApiResult(200,"密码更新成功",null);
    }

}
